class MACDConfig:
    """MACD性能配置类"""

    # 基础配置
    USE_WARMUP = True  # 是否使用预热数据（开启以避免初期样本不足导致NaN）
    WARMUP_DAYS = 5  # 预热数据天数
    WARMUP_HOURS = 2  # 预热数据小时数

    # 性能优化配置
    TICK_CHECK_INTERVAL = 5  # 每N个tick检查一次MACD，提高实时性
    CACHE_TTL = 60  # MACD结果缓存有效期（秒）
    MAX_CACHE_SIZE = 100  # 最大缓存条目数

    # 计算参数
    FAST_EMA = 12  # 快线EMA周期
    SLOW_EMA = 26  # 慢线EMA周期
    SIGNAL_EMA = 9  # 信号线EMA周期
    CROSS_EPSILON = 1e-6  # 金叉/死叉判定容差，防止0附近抖动。想更稳：把CROSS_EPSILON调大一点（如5e-6或1e-5），把MIN_CROSS_GAP_BARS设为2~3。
    MIN_CROSS_GAP_BARS = 1  # 两次交叉最少间隔bar数，防止连续抖动重复判定

    # 信号检测配置
    SIGNAL_TIME_WINDOW = 300  # 信号检测时间窗口（秒）
    MIN_DATA_POINTS = 50  # 最小数据点要求

    # 输出控制
    LOG_LEVEL = "INFO"  # 日志级别：DEBUG, INFO, WARNING, ERROR
    ENABLE_DETAILED_LOGGING = False  # 是否启用详细日志

    # 资源限制
    MAX_CONCURRENT_CALCULATIONS = 3  # 最大并发计算数
    CALCULATION_TIMEOUT = 30  # 计算超时时间（秒）

    @classmethod
    def get_optimized_params(cls):
        """获取优化后的参数配置"""
        return {
            'use_warmup': cls.USE_WARMUP,
            'warmup_days': cls.WARMUP_DAYS,
            'warmup_hours': cls.WARMUP_HOURS,
            'fast_ema': cls.FAST_EMA,
            'slow_ema': cls.SLOW_EMA,
            'signal_ema': cls.SIGNAL_EMA,
            'cache_ttl': cls.CACHE_TTL,
            'max_cache_size': cls.MAX_CACHE_SIZE
        }

    @classmethod
    def should_check_macd(cls, tick_count: int) -> bool:
        """判断是否应该检查MACD"""
        return tick_count % cls.TICK_CHECK_INTERVAL == 0

    @classmethod
    def is_cache_valid(cls, last_check_time: float, current_time: float) -> bool:
        """判断缓存是否有效"""
        return (current_time - last_check_time) < cls.CACHE_TTL

    @classmethod
    def get_signal_window(cls) -> int:
        """获取信号检测时间窗口"""
        return cls.SIGNAL_TIME_WINDOW


# 性能监控配置
class PerformanceMonitor:
    """性能监控配置"""

    ENABLE_PERFORMANCE_MONITORING = True
    LOG_PERFORMANCE_METRICS = True

    # 性能阈值
    MAX_CALCULATION_TIME = 5.0  # 最大计算时间（秒）
    MAX_MEMORY_USAGE = 500  # 最大内存使用（MB）
    MAX_CPU_USAGE = 80  # 最大CPU使用率（%）

    @classmethod
    def should_monitor_performance(cls) -> bool:
        """是否应该监控性能"""
        return cls.ENABLE_PERFORMANCE_MONITORING

    @classmethod
    def get_performance_thresholds(cls):
        """获取性能阈值"""
        return {
            'max_calculation_time': cls.MAX_CALCULATION_TIME,
            'max_memory_usage': cls.MAX_MEMORY_USAGE,
            'max_cpu_usage': cls.MAX_CPU_USAGE
        }


# 缓存管理配置
class CacheConfig:
    """缓存管理配置"""

    ENABLE_CACHE = True
    CACHE_CLEANUP_INTERVAL = 300  # 缓存清理间隔（秒）
    CACHE_STATS_LOG_INTERVAL = 600  # 缓存统计日志间隔（秒）

    @classmethod
    def should_use_cache(cls) -> bool:
        """是否应该使用缓存"""
        return cls.ENABLE_CACHE

    @classmethod
    def get_cache_config(cls):
        """获取缓存配置"""
        return {
            'enable_cache': cls.ENABLE_CACHE,
            'cleanup_interval': cls.CACHE_CLEANUP_INTERVAL,
            'stats_log_interval': cls.CACHE_STATS_LOG_INTERVAL
        }
